home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1992, Brian Berliner and Jeff Polk
- * Copyright (c) 1989-1992, Brian Berliner
- *
- * You may distribute under the terms of the GNU General Public License as
- * specified in the README file that comes with the CVS 1.3 kit.
- *
- * Print Log Information
- *
- * Prints the RCS "log" (rlog) information for the specified files. With no
- * argument, prints the log information for all the files in the directory
- * (recursive by default).
- */
-
- #include "cvs.h"
-
- #ifndef lint
- static char rcsid[] = "@(#)log.c 1.39 92/03/31";
- #endif
-
- #if __STDC__
- static Dtype log_dirproc (char *dir, char *repository, char *update_dir);
- static int log_fileproc (char *file, char *update_dir, char *repository,
- List * entries, List * srcfiles);
- #else
- static int log_fileproc ();
- static Dtype log_dirproc ();
- #endif /* __STDC__ */
-
- static char options[PATH_MAX];
-
- static char *log_usage[] =
- {
- "Usage: %s %s [-l] [rlog-options] [files...]\n",
- "\t-l\tLocal directory only, no recursion.\n",
- NULL
- };
-
- int
- cvslog (argc, argv)
- int argc;
- char *argv[];
- {
- int i;
- int numopt = 1;
- int err = 0;
- int local = 0;
-
- if (argc == -1)
- usage (log_usage);
-
- /*
- * All 'log' command options except -l are passed directly on to 'rlog'
- */
- options[0] = '\0'; /* Assume none */
- for (i = 1; i < argc; i++)
- {
- if (argv[i][0] == '-' || argv[i][0] == '\0')
- {
- numopt++;
- switch (argv[i][1])
- {
- case 'l':
- local = 1;
- break;
- default:
- (void) strcat (options, " ");
- (void) strcat (options, argv[i]);
- break;
- }
- }
- }
- argc -= numopt;
- argv += numopt;
-
- err = start_recursion (log_fileproc, (int (*) ()) NULL, log_dirproc,
- (int (*) ()) NULL, argc, argv, local,
- W_LOCAL | W_REPOS | W_ATTIC, 0, 1,
- (char *) NULL, 1);
- return (err);
- }
-
- /*
- * Do an rlog on a file
- */
- /* ARGSUSED */
- static int
- log_fileproc (file, update_dir, repository, entries, srcfiles)
- char *file;
- char *update_dir;
- char *repository;
- List *entries;
- List *srcfiles;
- {
- Node *p;
- RCSNode *rcsfile;
- int retcode = 0;
-
- p = findnode (srcfiles, file);
- if (p == NULL || (rcsfile = (RCSNode *) p->data) == NULL)
- {
- if (!really_quiet)
- error (0, 0, "nothing known about %s", file);
- return (1);
- }
-
- run_setup ("%s%s %s", Rcsbin, RCS_RLOG, options);
- run_arg (rcsfile->path);
- if ((retcode = run_exec (RUN_TTY, RUN_TTY, RUN_TTY, RUN_REALLY)) == -1)
- {
- error (1, errno, "fork failed for rlog on %s", file);
- }
- return (retcode);
- }
-
- /*
- * Print a warm fuzzy message
- */
- /* ARGSUSED */
- static Dtype
- log_dirproc (dir, repository, update_dir)
- char *dir;
- char *repository;
- char *update_dir;
- {
- if (!isdir (dir))
- return (R_SKIP_ALL);
-
- if (!quiet)
- error (0, 0, "Logging %s", update_dir);
- return (R_PROCESS);
- }
-